home *** CD-ROM | disk | FTP | other *** search
- #! /usr/bin/env python
-
- # Remote python server.
- # Execute Python commands remotely and send output back.
- # WARNING: This version has a gaping security hole -- it accepts requests
- # from any host on the Internet!
-
- import sys
- from socket import *
- import StringIO
- import traceback
-
- PORT = 4127
- BUFSIZE = 1024
-
- def main():
- if len(sys.argv) > 1:
- port = int(eval(sys.argv[1]))
- else:
- port = PORT
- s = socket(AF_INET, SOCK_STREAM)
- s.bind('', port)
- s.listen(1)
- while 1:
- conn, (remotehost, remoteport) = s.accept()
- print 'connected by', remotehost, remoteport
- request = ''
- while 1:
- data = conn.recv(BUFSIZE)
- if not data:
- break
- request = request + data
- reply = execute(request)
- conn.send(reply)
- conn.close()
-
- def execute(request):
- stdout = sys.stdout
- stderr = sys.stderr
- sys.stdout = sys.stderr = fakefile = StringIO.StringIO()
- try:
- try:
- exec request in {}, {}
- except:
- print
- traceback.print_exc(100)
- finally:
- sys.stderr = stderr
- sys.stdout = stdout
- return fakefile.getvalue()
-
- main()
-